package com.ry.bhwktapp.home.ui

//TODO kt中run函数的使用

//run 函数的特点 字符串演示
//具名函数配合run函数判断长度 isLong
//具名函数配合run函数检测合格 showText
//具名函数配合run函数增加一个括号 mapText
//具名函数输出内容
fun main() {
    val str = "Derry is ok"
    val run = str.run {
        this.length
        true
    }
    println(str.length)


//具名函数配合Run函数
    val run1 = str
        .run(::isLong)
        .run (::isShowText)
        .run(::isShowMap)
    println(run1)


//具名函数配合Run函数===更精简写法01
       str
        .run(::isLong)
        .run (::isShowText)
        .run(::isShowMap)
         .run {
             println(this)
         }

    //具名函数配合Run函数===更精简写法02
    str
        .run(::isLong)
        .run (::isShowText)
        .run(::isShowMap)
        .run (::println)

    //==============以上都是通过具名函数配合run函数调用  下面是通过匿名函数与run配合使用
    str
        .run {
            str.length > 17
        }
        .run {
            if (this)"字符创合规" else "字符串不好"
        }
        .run{
            if (this.contains("合规")) "加入集合" else "不加入集合"
        }
        .run (::println)

    //与let函数对比  let 持有it  而run持有this 都可以很灵活的将返回值传递给下一个函数
    str.let(::isLong)//it ==booean
     .let (::isShowText)// it =str
     .let(::isShowMap)// it=str
     .let (::println)

}

 fun isLong(str: String) :Boolean = str.length > 17

 fun isShowText(show: Boolean) = if (show)"字符创合规" else "字符串不好"

fun isShowMap(strMap: String) = if (strMap.contains("合规")) "加入集合" else "不加入集合"

